package cn.iocoder.yudao.module.erp.dal.mysql.report;

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.erp.controller.admin.report.vo.MetalReportReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.report.vo.MetalTrendReqVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 贵金属报表查询 Mapper
 */
@Mapper
public interface ErpMetalReportMapper extends BaseMapperX {

    /**
     * 按金属类型和纯度查询销售统计
     *
     * @param reqVO 查询参数
     * @return 销售统计数据列表
     */
    List<Map<String, Object>> selectSaleStatsByMetalType(@Param("reqVO") MetalReportReqVO reqVO);

    /**
     * 按金属类型和纯度查询回收统计
     *
     * @param reqVO 查询参数
     * @return 回收统计数据列表
     */
    List<Map<String, Object>> selectRecycleStatsByMetalType(@Param("reqVO") MetalReportReqVO reqVO);

    /**
     * 按金属类型和纯度查询兑换统计
     *
     * @param reqVO 查询参数
     * @return 兑换统计数据列表
     */
    List<Map<String, Object>> selectExchangeStatsByMetalType(@Param("reqVO") MetalReportReqVO reqVO);

    /**
     * 按金属类型和纯度查询库存统计
     *
     * @param reqVO 查询参数
     * @return 库存统计数据列表
     */
    List<Map<String, Object>> selectInventoryStatsByMetalType(@Param("reqVO") MetalReportReqVO reqVO);

    /**
     * 查询指定客户的交易统计
     *
     * @param customerId 客户ID
     * @param reqVO      查询参数
     * @return 客户交易统计数据
     */
    Map<String, Object> selectCustomerTransactionStats(
            @Param("customerId") Long customerId, @Param("reqVO") MetalReportReqVO reqVO);

    /**
     * 按金属类型和时间粒度查询交易趋势
     *
     * @param reqVO 查询参数
     * @return 趋势统计数据列表
     */
    List<Map<String, Object>> selectTrendStatsByTimeGranularity(@Param("reqVO") MetalTrendReqVO reqVO);

    /**
     * 查询旧料兑换总体统计
     *
     * @param reqVO 查询参数
     * @return 旧料兑换统计数据
     */
    Map<String, Object> selectExchangeOverallStats(@Param("reqVO") MetalReportReqVO reqVO);

} 